﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AutomationTools;
using AutomationTools.Procedimentos;
using AutomationTools.Procedimentos.Acao.Transformacao;
using System.IO;
using AutomationTools.Procedimentos.Leitura;

namespace AutomationToolsSample
{
    public partial class Form6 : Form
    {
        public Form6()
        {
            InitializeComponent();
        }

        private void btnPesquisar_Click(object sender, EventArgs e)
        {
            txtResult.Text = Pesquisar(txtPesquisar.Text);
        }

        private string Pesquisar(string tracecode)
        {
            ParametrosRequest parametros = new ParametrosRequest();
            parametros.Add(new ParametroRequest("P_LINGUA", "001"));
            parametros.Add(new ParametroRequest("P_TIPO", "002"));
            parametros.Add(new ParametroRequest("P_COD_LIS", tracecode));

            ProcedimentoController controller = new ProcedimentoController(
                new Request("http://websro.correios.com.br/sro_bin/txect01$.Inexistente", parametros, Request.EnumFormMethod.GET)
                , new RegexParseObject<ResultCorreios>()
            );

            var result = (ResultCorreios)controller.ExecutarProcedimentos();

            return result.Posicoes == null ? "Encomenda não encontrada" : FormatarResultado(result);
        }

        private string FormatarResultado(ResultCorreios result)
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(string.Format("{0}\t\t{1}\t\t{2}", "Data", "Local", "Situacao"));
            foreach (var item in result.Posicoes)
            {
                sb.AppendLine(string.Format("{0}\t{1}\t{2}", item.Data, item.Local, item.Situacao));
            }
            return sb.ToString();
        }

        private void Form6_Load(object sender, EventArgs e)
        {
            if (File.Exists("last"))
            {
                txtPesquisar.Text = File.ReadAllText("last");
                txtResult.Text = Pesquisar(txtPesquisar.Text);
            }
        }

        private void Form6_FormClosed(object sender, FormClosedEventArgs e)
        {
            File.WriteAllText("last", txtPesquisar.Text);
        }

        [CanRegexParse]
        public class ResultCorreios
        {
            [RegexParse(@"<tr><td.*?</tr>", IsArray = true)]
            public PosicaoCorreios[] Posicoes { get; set; }
        }

        [CanRegexParse]
        public class PosicaoCorreios
        {
            [RegexParse(@"<td[^>]*>(?:<[^>]*?>)?([^<>]*?)(?:<[^>]*?>)?</td>", Grupo = 1, Index = 0)]
            public string Data { get; set; }

            [RegexParse(@"<td[^>]*>(?:<[^>]*?>)?([^<>]*?)(?:<[^>]*?>)?</td>", Grupo = 1, Index = 1)]
            public string Local { get; set; }

            [RegexParse(@"<td[^>]*>(?:<[^>]*?>)?([^<>]*?)(?:<[^>]*?>)?</td>", Grupo = 1, Index = 2)]
            public string Situacao { get; set; }
        }
    }
}
